// pages/addressEdit/addressEdit.js
const addressApi = require('../../api/address');

Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 地址ID，编辑时有值，新增时为空
    id: null,
    // 表单数据
    formData: {
      name: '',
      phone: '',
      address: '',
      tag: '',
      sex: '1' // 性别，1表示先生，0表示女士
    },
    // 标签选项
    tagOptions: ['家', '公司', '学校'],
    // 选中的标签
    selectedTag: '',
    // 是否设为默认地址
    isDefault: false,
    // 性别选项
    sexOptions: [
      { value: '1', label: '先生' },
      { value: '0', label: '女士' }
    ]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 如果有ID参数，则是编辑模式
    if (options.id) {
      this.setData({
        id: options.id
      });
      
      // 获取地址详情
      this.getAddressDetail(options.id);
    }
  },

  // 获取地址详情
  getAddressDetail(id) {
    // 调用API获取地址详情
    addressApi.getAddressById(id).then(res => {
      if (res.code === 1) {
        const addressData = res.data;
        
        // 格式化地址数据，确保字段名称一致
        this.setData({
          formData: {
            name: addressData.consignee,
            phone: addressData.phone,
            address: addressData.detail,
            tag: addressData.label || '',
            // 保存原始数据，用于提交时构建完整的请求参数
            provinceCode: addressData.provinceCode,
            provinceName: addressData.provinceName,
            cityCode: addressData.cityCode,
            cityName: addressData.cityName,
            districtCode: addressData.districtCode,
            districtName: addressData.districtName,
            sex: addressData.sex || ''
          },
          selectedTag: addressData.label || '',
          isDefault: addressData.isDefault === 1
        });
      } else {
        wx.showToast({
          title: res.msg || '获取地址详情失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('获取地址详情失败:', err);
      wx.showToast({
        title: '获取地址详情失败',
        icon: 'none'
      });
    });
  },

  // 输入框内容变化处理
  onInputChange(e) {
    const { field } = e.currentTarget.dataset;
    const { value } = e.detail;
    
    this.setData({
      [`formData.${field}`]: value
    });
  },

  // 选择性别
  selectSex(e) {
    const sex = e.currentTarget.dataset.sex;
    this.setData({
      'formData.sex': sex
    });
  },

  // 选择标签
  selectTag(e) {
    const tag = e.currentTarget.dataset.tag;
    
    this.setData({
      selectedTag: tag,
      'formData.tag': tag
    });
  },

  /* // 切换是否设为默认地址
  toggleDefault() {
    this.setData({
      isDefault: !this.data.isDefault
    });
  }, */

  // 保存地址
  saveAddress() {
    const { formData, isDefault, id } = this.data;
    
    // 表单验证
    if (!formData.name) {
      return wx.showToast({
        title: '请输入收货人姓名',
        icon: 'none'
      });
    }
    
    if (!formData.phone) {
      return wx.showToast({
        title: '请输入手机号码',
        icon: 'none'
      });
    }
    
    if (!/^1\d{10}$/.test(formData.phone)) {
      return wx.showToast({
        title: '手机号码格式不正确',
        icon: 'none'
      });
    }
    
    if (!formData.address) {
      return wx.showToast({
        title: '请输入详细地址',
        icon: 'none'
      });
    }
    
    // 构建地址对象，按照接口要求的格式
    const addressData = {
      consignee: formData.name,
      phone: formData.phone,
      detail: formData.address,
      label: formData.tag,
      isDefault: isDefault ? 1 : 0,
      sex: formData.sex || '1', // 默认值
      // 如果是编辑模式，保留原有的地区信息
      provinceCode: formData.provinceCode || '',
      provinceName: formData.provinceName || '',
      cityCode: formData.cityCode || '',
      cityName: formData.cityName || '',
      districtCode: formData.districtCode || '',
      districtName: formData.districtName || ''
    };
    
    // 如果是编辑模式，需要添加id字段
    if (id) {
      addressData.id = id;
    }
    
    // 调用API保存数据
    const savePromise = id ? 
      addressApi.updateAddress(addressData) : 
      addressApi.addAddress(addressData);
    
    savePromise.then(res => {
      if (res.code === 1) {
        wx.showToast({
          title: id ? '保存成功' : '添加成功',
          icon: 'success',
          success: () => {
            setTimeout(() => {
              wx.navigateBack();
            }, 1500);
          }
        });
      } else {
        wx.showToast({
          title: res.msg || (id ? '保存失败' : '添加失败'),
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error(id ? '保存地址失败:' : '添加地址失败:', err);
      wx.showToast({
        title: id ? '保存失败' : '添加失败',
        icon: 'none'
      });
    });
  },

  // 删除地址
  deleteAddress() {
    const { id } = this.data;
    
    if (!id) return;
    
    wx.showModal({
      title: '提示',
      content: '确定要删除该地址吗？',
      success: (res) => {
        if (res.confirm) {
          // 调用API删除地址
          addressApi.deleteAddress(id).then(res => {
            if (res.code === 1) {
              wx.showToast({
                title: '删除成功',
                icon: 'success',
                success: () => {
                  setTimeout(() => {
                    wx.navigateBack();
                  }, 1500);
                }
              });
            } else {
              wx.showToast({
                title: res.msg || '删除失败',
                icon: 'none'
              });
            }
          }).catch(err => {
            console.error('删除地址失败:', err);
            wx.showToast({
              title: '删除失败',
              icon: 'none'
            });
          });
        }
      }
    });
  },
  
  // 返回上一页
  goBack() {
    wx.navigateBack();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})